import java.util.ArrayList;
import java.util.List;

/*
 * @lc app=leetcode.cn id=118 lang=java
 *
 * [118] 杨辉三角
 *
 * https://leetcode-cn.com/problems/pascals-triangle/description/
 *
 * algorithms
 * Easy (73.82%)
 * Likes:    660
 * Dislikes: 0
 * Total Accepted:    248.8K
 * Total Submissions: 337K
 * Testcase Example:  '5'
 *
 * 给定一个非负整数 numRows，生成「杨辉三角」的前 numRows 行。
 * 
 * 在「杨辉三角」中，每个数是它左上方和右上方的数的和。
 * 
 * 
 * 
 * 
 * 
 * 示例 1:
 * 
 * 
 * 输入: numRows = 5
 * 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
 * 
 * 
 * 示例 2:
 * 
 * 
 * 输入: numRows = 1
 * 输出: [[1]]
 * 
 * 
 * 
 * 
 * 提示:
 * 
 * 
 * 1 
 * 
 * 
 */

// @lc code=start
class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        ArrayList<Integer> currentRowList = new ArrayList<Integer>();;
        for (int i = 0; i < numRows; i++) {
            // 在0号位置添加一个新元素，值为1
            // 杨辉三角第二行元素个数比第一行多1
            currentRowList.add(0, 1);
            // 修改新行的列表
            for(int j = 1; j < currentRowList.size()-1; j++) {
                currentRowList.set(j, currentRowList.get(j) + currentRowList.get(j+1));
            }
            list.add(new ArrayList<>(currentRowList));
        }
        return list;
    }
}
// @lc code=end

